package API.RegexDome;

/**
 * ClassName:RegexText007
 * Package:API.RegexDome
 * Description:
 *
 * @Author:ZhangXin
 * @Create2023/2/1-12:06
 * @Version:v1.0
 */
public class RegexText007 {
    /*
    * 请编写正则表达式验证用户名是否满足要求
    *   要求：大小写字母,数字,下划线一共4-16位
    *
    * 请编写正则表达式验证身份证号码是否满足要求
    *   要求：18位,前17位任意数字,最后位可以是数字,也可以是大写或小写字母X
    *   复杂要求：按照身份证号码的格式严格要求
    * */
    public static void main(String[] args) {


        //大小写字母,数字,下划线一共4-16位
        String username = "\\w{4,16}";
        System.out.println("zhangsan".matches(username));//true
        System.out.println("&zhangsan".matches(username));//false

        //140 224 2000 0404 2110
        //18位,前17位任意数字,最后位可以是数字,也可以是大写或小写字母X
        System.out.println("----身份证验证----");
        String idCard = "[1-9][0-9]{16}(x|X|[0-9]){1}";
        //[1-9]\\d{16}(\\d|X|x){1}
        //[1-9]\\d{16}[\\dXx]
        //[1-9]\\d{16}(\\d|(?i)x)
        System.out.println("140221200004042110".matches(idCard));
        System.out.println("14022120000404211X".matches(idCard));
        System.out.println("44022120000404211x".matches(idCard));

        //按照身份证号码的格式严格要求
        System.out.println("身份证号码的格式严格校验");
        //140221   20000404  2110
          /*
          * 前6位：省份,市区,派出所等信息   第一位不能为0,后面5位是任意数字  [1-9]\d{5}
          * 年的前半段：18  19 20    [18|19|20]
          * 年的后半段：任意数字出现两次 \\d{2}
          * 月份：  01~09  10  11  12  (0[1-9]|1[0-2])
          * 日期：  01~31  --->01~09  10~19  20~29 30~31    0[1-9]|[12]\\d|3[01]
          * 后面4位：任意数字出现3次   最后一位可以是数字,也可以是大写或小写字母X \\d{3}([\\d|(?i)x])
          * */
        String idCard001 = "[1-9]\\d{5}(18|19|20)\\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])\\d{3}([\\d|(?i)x])";
        System.out.println("140221200004042110".matches(idCard001));//true
        System.out.println("14022120000404211X".matches(idCard));//true
        System.out.println("14022120000404211x".matches(idCard));//true
        System.out.println("44022120000404211X".matches(idCard));//true






//        //忽略大小写的书写方式
//        //在匹配的时候忽略abc的大小写
//        System.out.println("----忽略大小写----");
//        String regex = "(?i)abc";
//        System.out.println("abc".matches(regex));//true
//        System.out.println("ABC".matches(regex));//true
//        System.out.println("Abc".matches(regex));//true
//
//        //不忽略a的大小写
//        String regex1 = "a(?i)bc";
//        System.out.println("abc".matches(regex1));//true
//        System.out.println("Abc".matches(regex1));//false
//        System.out.println("aBc".matches(regex1));//true
//        //只忽略b的大小写
//        String regex2 = "a((?i)b)c";
//        System.out.println("Abc".matches(regex2));//false
//        System.out.println("aBc".matches(regex2));//true
//        System.out.println("aBC".matches(regex2));//false
    }
}
